home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byte1286.arc / DOSET.C < prev    next >
C/C++ Source or Header  |  1986-09-03  |  3KB  |  79 lines

  1. /*****************************************************
  2. *         DoSet.c (CALCULATES MANDELBRO-SET)
  3. *    by Peter B. Schroeder 12-10-85 (updated 1-29-86)
  4. *   11550 SW 108 Court  Miami, FL 33176 (305)238-5509
  5. * Program asks for coordinates (lower left-hand corner)
  6. * and range of display. It then opens for output a data
  7. * file specified in the command line or, by default,
  8. * called ZOOM.DATA; writes the coordinates and range to
  9. * the file; then multiples the complex number based on
  10. * the x,y values of a 200x200 pixel array for 1,000
  11. * iterations or until the sum of the squares of two
  12. * parts of the complex number reach or exceed four. The
  13. * count-of-iterations for each pixel (a number from
  14. * 1 to 1,000) are coded into two bytes and these values
  15. * are written to the data file row by row for display
  16. * by the ViewSet program.
  17. ******************************************************/
  18. #include <stdio.h>
  19. #include <math.h>
  20.  
  21. main(argc,argv) int argc;char *argv[];
  22. {
  23.  int y,x,count,totct;
  24.  float x_coord,y_coord,range,gap,size,a,b,ac,bc,b1;
  25.  char ct[201][2];
  26.  FILE *OutFile;
  27.   /* Input x-y coordinates and range from keyboard   */
  28.   printf("Input X_COORDINATE: ");
  29.   scanf("%f",&x_coord);
  30.   printf("Input Y_COORDINATE: ");
  31.   scanf("%f",&y_coord);
  32.   printf("Input        RANGE: ");
  33.   scanf("%f",&range);
  34.   gap = range / 200.0;    /* Increment per pixel     */
  35.   y_coord += range;       /* Start at top of display */
  36.   /* Open output file     (default or command line)  */
  37.   if(argc<=1) OutFile = fopen("df1:ZOOM.DATA","w");
  38.   else OutFile = fopen(argv[1],"w");
  39.   /* Write coordinates and range to data file        */
  40.   fprintf(OutFile,"%7.6f\n",x_coord);
  41.   fprintf(OutFile,"%7.6f\n",y_coord);
  42.   fprintf(OutFile,"%8.7f\n",range);
  43.   /* Calculate count value for each pixel (200X200)  */
  44.   for(y=1;y<=200;y++)       /* Each row              */
  45.   {
  46.    bc = y_coord - y*gap; totct = 0;
  47.    for(x=1;x<=200;x++)       /* Each pixel per row   */
  48.    {
  49.     ac = x*gap + x_coord;
  50.     a = ac; b = bc; size = 0.0; count = 0;
  51.     while(size < 4.0 && count < 1000)
  52.     {
  53.      /* Do complex-number multiply                   */
  54.      b1 = 2*a*b;
  55.      a = a*a - b*b + ac;
  56.      b = b1 + bc;
  57.      /* Pythagorean theorem                          */
  58.      size = a*a + b*b;
  59.      /* Don't need square root                       */
  60.      count++;
  61.     }
  62.     totct += count;
  63.     /* Code count in two bytes to save disk space    */
  64.     ct[x][0] = count/256;
  65.     ct[x][1] = count % 256;
  66.    } /* End x loop                                   */
  67.    /* Show row number and average count to CRT       */
  68.    printf("%5d  %5d\n",y,totct/200);
  69.    /* Print coded pixel-values this row to data file */
  70.    for(x=1;x<=200;x++)
  71.    {
  72.     putc(ct[x][0],OutFile);
  73.     putc(ct[x][1],OutFile);
  74.    }
  75.   } /* End y loop                                    */
  76.   fclose(OutFile);  /* Close data file               */
  77.  } /* End main                                       */
  78.